package com.ycx.ycxmybatismanagement.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Aspect //当前类为切面类
@Slf4j
@Component  //让Spring管理
public class TimeAspect {
                        //作用到的类为: 目标对象(Target)  代理对象 作用到哪个对象上
    @Around("execution(* com.ycx.ycxmybatismanagement.service.Impl.*.*(..))") //切点表达式:作用到什么上  +通知  = 切面(Aspect)
    public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {

        //通知(Advice)recordTime整个流程   抽取出来的共通的业务逻辑

        long begin = System.currentTimeMillis();//记录方法执行开始时间

        //执行原始方法   :连接点(JoinPoint)   业务方法
        Object result = pjp.proceed();

        long end = System.currentTimeMillis();//记录方法执行结束时间
        log.info("方法执行耗时: {}毫秒",end-begin);//计算方法执行耗时
        return result;
    }
}